﻿Public Class frm_empleados

    Dim check As New Validar
    Dim deshabilitarGuardar As Boolean = False
    Dim accesoDatos As New AccesoDatos("Empleado")

    Enum actualizar
        modificar
        ingresar
    End Enum

    Dim accion As actualizar

    Private Sub frm_empleados_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cargarCombo(cmb_tipoDoc, accesoDatos.leerTabla("TipoDoc"), "idTipoDoc", "nombre")
        cargarCombo(cmb_provincia, accesoDatos.leerTabla("Provincia"), "idProvincia", "nombre")
        'cargarCombo(cmb_ciudad, accesoDatos.leerTabla("Ciudad"), "idCiudad", "nombre")

        cmb_ciudad.SelectedIndex = -1
        cmb_provincia.SelectedIndex = -1
        cmb_tipoDoc.SelectedIndex = -1

        txt_idEmpleado.Enabled = False
        txt_apellido.Enabled = False
        txt_direccion.Enabled = False
        txt_email.Enabled = False
        txt_nombre.Enabled = False
        txt_nroDoc.Enabled = False
        cmb_ciudad.Enabled = False
        cmb_provincia.Enabled = False
        cmb_tipoDoc.Enabled = False
        msk_fechaInicio.Enabled = False
        msk_fechaNacimiento.Enabled = False
        msk_telefono.Enabled = False

        cmd_nuevo.Focus()

        cargarGrilla(accesoDatos.leerEmpleado())
    End Sub

    Private Sub cargarCombo(ByRef combo As ComboBox, ByRef tablaACargar As Data.DataTable, ByVal indice As String, ByVal campo As String)
        combo.DataSource = Nothing
        combo.DataSource = tablaACargar
        combo.ValueMember = indice
        combo.DisplayMember = campo
    End Sub

    Private Sub cargarGrilla(ByVal tablaACargar As Data.DataTable)
        dgv_empleados.DataSource = tablaACargar
    End Sub

    Private Sub txt_nroDoc_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nroDoc.Leave
        If check.validarNumero(txt_nroDoc.Text) = False Then
            lbl_errorNumeroDoc.Text = "*Ingrese un Número"
            txt_nroDoc.Focus()
            cmd_guardar.Enabled = False
            cmd_buscar.Enabled = False
        Else
            lbl_errorNumeroDoc.Text = ""
            cmd_guardar.Enabled = True
            cmd_buscar.Enabled = True
        End If
    End Sub

    Private Sub msk_fechaInicio_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles msk_fechaInicio.Leave
        If check.validarFecha(msk_fechaInicio.Text) = False Then
            lbl_errorFechaInicio.Text = "*Ingrese una fecha"
            cmd_guardar.Enabled = False
            cmd_buscar.Enabled = False
        Else
            lbl_errorFechaInicio.Text = ""
            cmd_guardar.Enabled = True
            cmd_buscar.Enabled = True
        End If
    End Sub


    Private Sub msk_fechaNacimiento_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles msk_fechaNacimiento.Leave
        If check.validarFecha(msk_fechaNacimiento.Text) = False Then
            lbl_ErrorFechaNac.Text = "*Ingrese una fecha"
            cmd_guardar.Enabled = False
            cmd_buscar.Enabled = False
        Else
            lbl_ErrorFechaNac.Text = ""
            cmd_guardar.Enabled = True
            cmd_buscar.Enabled = True
        End If
    End Sub

    Private Sub cmd_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_guardar.Click
        If validarBlancos() = True Then
            If MessageBox.Show("¿Está seguro que desea guardar los cambios?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
                If accion = actualizar.ingresar Then
                    accesoDatos.insertar(True, generarStringValores())
                    MessageBox.Show("Empleado guardado con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Else
                    accesoDatos.Modificar(True, generarStringValores(), generarRestriccionUpdate("idEmpleado", txt_idEmpleado))
                    MessageBox.Show("Empleado guardado con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
                cargarGrilla(accesoDatos.leerEmpleado())
            Else
                Exit Sub
            End If
        End If
    End Sub

    Private Function validarBlancos() As Boolean
        Dim resultado As Boolean = True
        If check.validarComboBlanco(cmb_ciudad.SelectedIndex) = True Then
            MessageBox.Show("Seleccione una ciudad.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            cmb_ciudad.Focus()
            resultado = False
        ElseIf check.validarComboBlanco(cmb_provincia.SelectedIndex) = True Then
            MessageBox.Show("Seleccione una provincia.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            cmb_provincia.Focus()
            resultado = False
        ElseIf check.validarComboBlanco(cmb_tipoDoc.SelectedIndex) = True Then
            MessageBox.Show("seleccione un tipo de documento.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            cmb_tipoDoc.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_apellido.Text) = True Then
            MessageBox.Show("Ingrese un apellido.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_apellido.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_nombre.Text) = True Then
            MessageBox.Show("Ingrese un nombre.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_nombre.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_direccion.Text) = True Then
            MessageBox.Show("Ingrese una dirección.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_direccion.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_email.Text) = True Then
            MessageBox.Show("Ingrese una dirección de correo electrónico.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_email.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_nroDoc.Text) = True Then
            MessageBox.Show("Ingrese un número de documento.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_nroDoc.Focus()
            resultado = False
        ElseIf check.validarBlanco(msk_telefono.Text) = True Then
            MessageBox.Show("Ingrese un número de teléfono.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            msk_telefono.Focus()
            resultado = False
        ElseIf check.validarBlanco(msk_fechaInicio.Text) = True Then
            MessageBox.Show("Ingrese una fecha de inicio.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            msk_fechaInicio.Focus()
            resultado = False
        ElseIf check.validarBlanco(msk_fechaNacimiento.Text) = True Then
            MessageBox.Show("Ingrese una fecha de nacimiento.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            msk_fechaNacimiento.Focus()
            resultado = False
        End If
        Return resultado
    End Function

    Private Function generarStringValores() As String
        Dim valores As String = "nroDocumento =" & txt_nroDoc.Text
        valores &= ", idTipoDoc =" & cmb_tipoDoc.SelectedValue
        valores &= ", nombre =" & txt_nombre.Text
        valores &= ", apellido =" & txt_apellido.Text
        valores &= ", telefono =" & msk_telefono.Text
        valores &= ", direccion =" & txt_direccion.Text
        valores &= ", idProvincia =" & cmb_provincia.SelectedValue
        valores &= ", idCiudad =" & cmb_ciudad.SelectedValue
        valores &= ", email =" & txt_email.Text
        valores &= ", fechaIni =" & msk_fechaInicio.Text
        valores &= ", fechaNac =" & msk_fechaNacimiento.Text
        Return valores
    End Function

    Private Function generarRestriccionUpdate(ByVal campo As String, ByRef valor As TextBox) As String
        Dim restriccion As String
        restriccion = campo & " = " & valor.Text
        Return restriccion
    End Function

    Private Sub cmd_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_nuevo.Click
        cargarGrilla(accesoDatos.leerEmpleado())

        txt_idEmpleado.Text = ""
        txt_apellido.Enabled = True
        txt_direccion.Enabled = True
        txt_email.Enabled = True
        txt_nombre.Enabled = True
        txt_nroDoc.Enabled = True
        cmb_ciudad.Enabled = False
        cmb_provincia.Enabled = True
        cmb_tipoDoc.Enabled = True
        msk_fechaInicio.Enabled = True
        msk_fechaNacimiento.Enabled = True
        msk_telefono.Enabled = True

        txt_apellido.Text = ""
        txt_direccion.Text = ""
        txt_email.Text = ""
        txt_nombre.Text = ""
        txt_nroDoc.Text = ""
        cmb_ciudad.DataSource = Nothing
        cmb_provincia.SelectedIndex = -1
        cmb_tipoDoc.SelectedIndex = -1
        msk_fechaInicio.Text = ""
        msk_fechaNacimiento.Text = ""
        msk_telefono.Text = ""

        txt_nombre.Focus()
        accion = actualizar.ingresar
    End Sub


    Private Sub cmd_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_salir.Click
        Me.Close()
    End Sub

    Private Sub cmd_cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_cancelar.Click
        txt_idEmpleado.Text = ""
        txt_apellido.Text = ""
        txt_direccion.Text = ""
        txt_email.Text = ""
        txt_nombre.Text = ""
        txt_nroDoc.Text = ""
        cmb_ciudad.DataSource = Nothing
        cmb_provincia.SelectedIndex = -1
        cmb_tipoDoc.SelectedIndex = -1
        msk_fechaInicio.Text = ""
        msk_fechaNacimiento.Text = ""
        msk_telefono.Text = ""
        cmb_ciudad.Enabled = False
        txt_nombre.Focus()
        cargarGrilla(accesoDatos.leerEmpleado())
    End Sub

    Private Sub dgv_empleados_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgv_empleados.DoubleClick
        accion = actualizar.modificar
        Dim id As String = dgv_empleados.CurrentRow.Cells(0).Value
        Dim tabla As Data.DataTable = accesoDatos.consulta("select * from Empleado where idEmpleado = " & id)

        txt_apellido.Text = tabla.Rows(0)("apellido")
        txt_direccion.Text = tabla.Rows(0)("direccion")
        txt_email.Text = tabla.Rows(0)("email")
        txt_idEmpleado.Text = tabla.Rows(0)("idEmpleado")
        txt_nombre.Text = tabla.Rows(0)("nombre")
        txt_nroDoc.Text = tabla.Rows(0)("nroDocumento")
        cmb_ciudad.SelectedValue = tabla.Rows(0)("idCiudad")
        cmb_provincia.SelectedValue = tabla.Rows(0)("idProvincia")
        cmb_tipoDoc.SelectedValue = tabla.Rows(0)("idTipoDoc")
        msk_fechaInicio.Text = tabla.Rows(0)("fechaIni")
        msk_fechaNacimiento.Text = tabla.Rows(0)("fechaNac")
        msk_telefono.Text = tabla.Rows(0)("telefono")

        txt_nroDoc.Enabled = False
        txt_idEmpleado.Enabled = False
        cmb_tipoDoc.Enabled = False

        txt_idEmpleado.Text = ""
        txt_apellido.Enabled = True
        txt_direccion.Enabled = True
        txt_email.Enabled = True
        txt_nombre.Enabled = True
        txt_nroDoc.Enabled = True
        cmb_ciudad.Enabled = True
        cmb_provincia.Enabled = True
        cmb_tipoDoc.Enabled = True
        msk_fechaInicio.Enabled = True
        msk_fechaNacimiento.Enabled = True
        msk_telefono.Enabled = True

    End Sub

    Private Sub cmd_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_eliminar.Click
        If txt_idEmpleado.Text = "" Then
            MessageBox.Show("Debe hacer doble click en el empleado que desea eliminar", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            If MessageBox.Show("¿Está seguro que desea eliminar?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
                accesoDatos.eliminar("idEmpleado", txt_idEmpleado.Text)
                MessageBox.Show("¡Se elimino con exito!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                cargarGrilla(accesoDatos.leerEmpleado())
            End If
        End If
    End Sub

    Private Sub frm_empleados_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If MessageBox.Show("¿Está seguro que desea salir?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            e.Cancel = False
            frm_menu.Show()
        Else
            e.Cancel = True
        End If
    End Sub

    Private Sub cmd_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_buscar.Click
        frm_busquedaEmpleado.ShowDialog()
    End Sub

    Public Sub buscarPorId(ByVal id As String)
        dgv_empleados.DataSource = accesoDatos.consulta("select idEmpleado as 'ID', nombre as 'Nombre', apellido as 'Apellido' from Empleado where idEmpleado = " & id)
    End Sub


    Public Sub buscarPorNombre(ByVal nombre As String)
        dgv_empleados.DataSource = accesoDatos.consulta("select idEmpleado as 'ID', nombre as 'Nombre', apellido as 'Apellido' from Empleado where nombre LIKE UPPER('%" & nombre & "%')")
    End Sub

    Private Sub cmb_provincia_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_provincia.SelectedIndexChanged
        If IsNumeric(cmb_provincia.SelectedValue) Then
            Dim tabla As New Data.DataTable
            tabla = accesoDatos.consulta("select * from Ciudad where idProvincia = " & cmb_provincia.SelectedValue)
            cargarCombo(cmb_ciudad, tabla, "idCiudad", "nombre")
            cmb_ciudad.Enabled = True

        End If
    End Sub
End Class